package br.com.jk.telefone;

import br.com.jk.cliente.Cliente;
import br.com.jk.empresa.Empresa;
import br.com.jk.fornecedor.Fornecedor;
import java.io.Serializable;
import java.util.Objects;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Inheritance;
import javax.persistence.InheritanceType;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;

/**
 *
 * @author camilo
 */
@Entity
@Table(name = TelefoneDao.NAME_TABLE)
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
public class Telefone implements Serializable {

  public static final int TELEFONE_CLIENTE = 0;
  public static final int TELEFONE_FORNECEDOR = 1;
  public static final int TELEFONE_EMPRESA = 2;
  @Id
  @GeneratedValue(strategy = GenerationType.AUTO)
  private int id;
  @Column(name = TelefoneDao.NAME_COLUMN_TIPO_ENTIDADE, nullable = false)
  private int tipoEntidade;
  @Column(nullable = false, name = TelefoneDao.NAME_COLUMN_NUMERO)
  private String numero;
  @Column(nullable = false, name = TelefoneDao.NAME_COLUMN_PESSOAL)
  private Boolean pessoal;
  @Column(nullable = false, name = TelefoneDao.NAME_COLUMN_CELULAR)
  private Boolean celular;
  @Column(nullable = false, name = TelefoneDao.NAME_COLUMN_NOME_CONTATO)
  private String nomeContato;
  @ManyToOne
  @JoinColumn(name = TelefoneDao.NAME_COLUMN_ID_FORNECEDOR)
  private Fornecedor fornecedor;
  @ManyToOne
  @JoinColumn(name = TelefoneDao.NAME_COLUMN_ID_CLIENTE)
  private Cliente cliente;
  @ManyToOne
  @JoinColumn(name = TelefoneDao.NAME_COLUMN_ID_EMPRESA)
  private Empresa empresa;

  public int getId() {
    return id;
  }

  public void setId(int id) {
    this.id = id;
  }

  public int getTipoEntidade() {
    return tipoEntidade;
  }

  public void setTipoEntidade(int tipoEntidade) {
    this.tipoEntidade = tipoEntidade;
  }

  public String getNumero() {
    return numero;
  }

  public void setNumero(String numero) {
    this.numero = numero;
  }

  public Boolean getPessoal() {
    return pessoal;
  }

  public void setPessoal(Boolean pessoal) {
    this.pessoal = pessoal;
  }

  public Boolean getCelular() {
    return celular;
  }

  public void setCelular(Boolean celular) {
    this.celular = celular;
  }

  public String getNomeContato() {
    return nomeContato;
  }

  public void setNomeContato(String nomeContato) {
    this.nomeContato = nomeContato;
  }

  public Fornecedor getFornecedor() {
    return fornecedor;
  }

  public void setFornecedor(Fornecedor fornecedor) {
    this.fornecedor = fornecedor;
  }

  public Cliente getCliente() {
    return cliente;
  }

  public void setCliente(Cliente cliente) {
    this.cliente = cliente;
  }

  public Empresa getEmpresa() {
    return empresa;
  }

  public void setEmpresa(Empresa empresa) {
    this.empresa = empresa;
  }

  @Override
  public int hashCode() {
    int hash = 7;
    hash = 97 * hash + this.id;
    hash = 97 * hash + this.tipoEntidade;
    hash = 97 * hash + Objects.hashCode(this.numero);
    hash = 97 * hash + Objects.hashCode(this.pessoal);
    hash = 97 * hash + Objects.hashCode(this.celular);
    hash = 97 * hash + Objects.hashCode(this.nomeContato);
    hash = 97 * hash + Objects.hashCode(this.fornecedor);
    hash = 97 * hash + Objects.hashCode(this.cliente);
    hash = 97 * hash + Objects.hashCode(this.empresa);
    return hash;
  }

  @Override
  public boolean equals(Object obj) {
    if (obj == null) {
      return false;
    }
    if (getClass() != obj.getClass()) {
      return false;
    }
    final Telefone other = (Telefone) obj;
    if (this.id != other.id) {
      return false;
    }
    if (this.tipoEntidade != other.tipoEntidade) {
      return false;
    }
    if (!Objects.equals(this.numero, other.numero)) {
      return false;
    }
    if (!Objects.equals(this.pessoal, other.pessoal)) {
      return false;
    }
    if (!Objects.equals(this.celular, other.celular)) {
      return false;
    }
    if (!Objects.equals(this.nomeContato, other.nomeContato)) {
      return false;
    }
    if (!Objects.equals(this.fornecedor, other.fornecedor)) {
      return false;
    }
    if (!Objects.equals(this.cliente, other.cliente)) {
      return false;
    }
    if (!Objects.equals(this.empresa, other.empresa)) {
      return false;
    }
    return true;
  }
}
